Análise dos Dados

TODO: Separar o que foi feito no dataset bruto do depois das mudanças

import numpy as np
import pandas as pd
from plotly import express as px, io as pio
pd.options.plotting.backend = 'plotly'
pio.renderers.default = 'plotly_mimetype+notebook_connected'

Análises de dados e investigações no Dataset bruto

Descrição de como foi feita a análise(perguntas que foram feitas para a base, possíveis pontos de limpeza, versões do python e bibliotecas)

essa é a parte que viemos fazendo até agora, identificando o que nos será útil da base que escolhemos

output_file = '../data/cursos.csv.zip'
df = pd.read_csv(output_file, dtype={'cod_municipio': int})
df
ano regiao uf cod_municipio nome_municipio capital latitude longitude cod_area area curso rede_publica presencial bacharel ingressantes ingressantes_fem concluintes concluintes_fem frac_ingressantes frac_concluintes
0 2010 Norte RO 1100049 Cacoal False -11.4343 -61.4562 51 Ciências biológicas e correlatas Biologia False True True 21 13 6 4 0.619048 0.666667
1 2010 Norte RO 1100049 Cacoal False -11.4343 -61.4562 71 Engenharia e profissões correlatas Gestão ambiental False True False 61 26 27 12 0.426230 0.444444
2 2010 Norte RO 1100049 Cacoal False -11.4343 -61.4562 71 Engenharia e profissões correlatas Gestão ambiental False False False 88 48 10 5 0.545455 0.500000
3 2010 Norte RO 1100064 Colorado do Oeste False -13.1174 -60.5454 71 Engenharia e profissões correlatas Gestão ambiental True True False 59 33 23 11 0.559322 0.478261
4 2010 Norte RO 1100122 Ji-Paraná False -10.8777 -61.9322 71 Engenharia e profissões correlatas Gestão ambiental False False False 109 52 32 15 0.477064 0.468750
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
17974 2019 Centro-Oeste DF 5300108 Brasília True -15.7795 -47.9297 71 Engenharia e profissões correlatas Gestão ambiental False False False 25 13 6 3 0.520000 0.500000
17975 2019 Centro-Oeste DF 5300108 Brasília True -15.7795 -47.9297 71 Engenharia e profissões correlatas Gestão ambiental False False False 17 7 9 3 0.411765 0.333333
17976 2019 Centro-Oeste DF 5300108 Brasília True -15.7795 -47.9297 71 Engenharia e profissões correlatas Gestão ambiental False False False 24 8 3 2 0.333333 0.666667
17977 2019 Centro-Oeste DF 5300108 Brasília True -15.7795 -47.9297 71 Engenharia e profissões correlatas Gestão ambiental False False False 48 14 20 2 0.291667 0.100000
17978 2019 Centro-Oeste DF 5300108 Brasília True -15.7795 -47.9297 54 Matemática e estatística Estatística True True True 88 23 23 6 0.261364 0.260870

17979 rows × 20 columns

Histograma

Ingressantes

px.histogram(df, x='frac_ingressantes', color='cod_area', barmode='stack')

Concluintes

px.histogram(df, x='frac_concluintes', color='cod_area', barmode='stack')

Agrupado por features

def get_grouped(df: pd.DataFrame, by_col=None):
  by_cols = ['ano'] if by_col == None else ['ano', by_col]
  use_cols = by_cols + ['ingressantes', 'concluintes', 'ingressantes_fem', 'concluintes_fem']
  dfg = df[use_cols].groupby(by=by_cols, as_index=False).sum()
  dfg = dfg.melt(
    id_vars = use_cols[:-4],
    value_vars = use_cols[-4:],)
  return dfg
def calc_round_ceil(df, value='value', div=1000):
  return np.ceil(df[value].max() / div) * div

Total

dfg = get_grouped(df)
dfg
ano variable value
0 2010 ingressantes 118827
1 2011 ingressantes 135779
2 2012 ingressantes 162190
3 2013 ingressantes 172348
4 2014 ingressantes 182698
5 2015 ingressantes 172402
6 2016 ingressantes 163485
7 2017 ingressantes 158239
8 2018 ingressantes 147192
9 2019 ingressantes 153755
10 2010 concluintes 44043
11 2011 concluintes 49723
12 2012 concluintes 57057
13 2013 concluintes 57947
14 2014 concluintes 57994
15 2015 concluintes 58216
16 2016 concluintes 59397
17 2017 concluintes 58377
18 2018 concluintes 55737
19 2019 concluintes 56185
20 2010 ingressantes_fem 31650
21 2011 ingressantes_fem 36712
22 2012 ingressantes_fem 43211
23 2013 ingressantes_fem 45463
24 2014 ingressantes_fem 46855
25 2015 ingressantes_fem 42820
26 2016 ingressantes_fem 40108
27 2017 ingressantes_fem 38112
28 2018 ingressantes_fem 35387
29 2019 ingressantes_fem 37935
30 2010 concluintes_fem 12286
31 2011 concluintes_fem 13956
32 2012 concluintes_fem 16219
33 2013 concluintes_fem 16867
34 2014 concluintes_fem 16736
35 2015 concluintes_fem 16640
36 2016 concluintes_fem 16291
37 2017 concluintes_fem 15930
38 2018 concluintes_fem 14413
39 2019 concluintes_fem 14809
px.line(dfg, x='ano', y='value', line_dash='variable', range_y=[0, None])

Por Região

var = 'regiao'
dfg = get_grouped(df, var)
dfg
ano regiao variable value
0 2010 Centro-Oeste ingressantes 9865
1 2010 Nordeste ingressantes 13979
2 2010 Norte ingressantes 6579
3 2010 Sudeste ingressantes 71278
4 2010 Sul ingressantes 17126
... ... ... ... ...
195 2019 Centro-Oeste concluintes_fem 1056
196 2019 Nordeste concluintes_fem 2121
197 2019 Norte concluintes_fem 890
198 2019 Sudeste concluintes_fem 8286
199 2019 Sul concluintes_fem 2456

200 rows × 4 columns

px.line(dfg, x='ano', y='value', color=var, line_dash='variable', range_y=[0, None])
px.bar(dfg, x=var, y='value', color='variable', barmode='group', animation_frame='ano', range_y=[0, calc_round_ceil(dfg)])
px.scatter(df, x='frac_ingressantes', y='frac_concluintes', color='regiao', opacity=.75, size='concluintes_fem')

Por Unidade Federativa

var = 'uf'
dfg = get_grouped(df, var)
dfg
ano uf variable value
0 2010 AC ingressantes 514
1 2010 AL ingressantes 924
2 2010 AM ingressantes 2405
3 2010 AP ingressantes 202
4 2010 BA ingressantes 3287
... ... ... ... ...
1075 2019 RS concluintes_fem 1010
1076 2019 SC concluintes_fem 512
1077 2019 SE concluintes_fem 90
1078 2019 SP concluintes_fem 4957
1079 2019 TO concluintes_fem 65

1080 rows × 4 columns

px.line(dfg, x='ano', y='value', color=var, line_dash='variable', range_y=[0, None])
px.bar(dfg, x=var, y='value', color='variable', barmode='group', animation_frame='ano', range_y=[0, calc_round_ceil(dfg)])
px.scatter(df, x='frac_ingressantes', y='frac_concluintes', color='uf', opacity=.75, size='concluintes_fem') #, animation_frame='ano')

Por se é Capital

var = 'capital'
dfg = get_grouped(df, var)
dfg
ano capital variable value
0 2010 False ingressantes 55133
1 2010 True ingressantes 63694
2 2011 False ingressantes 62350
3 2011 True ingressantes 73429
4 2012 False ingressantes 77846
... ... ... ... ...
75 2017 True concluintes_fem 7746
76 2018 False concluintes_fem 7492
77 2018 True concluintes_fem 6921
78 2019 False concluintes_fem 7677
79 2019 True concluintes_fem 7132

80 rows × 4 columns

px.line(dfg, x='ano', y='value', color=var, line_dash='variable', range_y=[0, None])
px.bar(dfg, x=var, y='value', color='variable', barmode='group', animation_frame='ano', range_y=[0, calc_round_ceil(dfg)])
px.scatter(df, x='frac_ingressantes', y='frac_concluintes', color='capital', opacity=.75, size='concluintes_fem')

Por Area STEM

var = 'cod_area'
dfg = get_grouped(df, var)
dfg
ano cod_area variable value
0 2010 51 ingressantes 7009
1 2010 53 ingressantes 6892
2 2010 54 ingressantes 1660
3 2010 61 ingressantes 54624
4 2010 71 ingressantes 48642
... ... ... ... ...
195 2019 51 concluintes_fem 2893
196 2019 53 concluintes_fem 1448
197 2019 54 concluintes_fem 320
198 2019 61 concluintes_fem 3858
199 2019 71 concluintes_fem 6290

200 rows × 4 columns

px.line(dfg, x='ano', y='value', color=var, line_dash='variable', range_y=[0, None])
cod_areas = {
  51: 'Ciên. Biológicas',
  53: 'Ciên. Físicas',
  54: 'Matemática & Estatística',
  61: 'Computação',
  71: 'Engenharia',
}
dfg[var] = dfg[var].map(cod_areas)
px.bar(dfg, x=var, y='value', color='variable', barmode='group', animation_frame='ano', range_y=[0, calc_round_ceil(dfg)])
px.scatter(df, x='frac_ingressantes', y='frac_concluintes', color='area', opacity=.75, size='concluintes_fem')

Por se é Rede Pública

var = 'rede_publica'
dfg = get_grouped(df, var)
dfg
ano rede_publica variable value
0 2010 False ingressantes 82799
1 2010 True ingressantes 36028
2 2011 False ingressantes 92579
3 2011 True ingressantes 43200
4 2012 False ingressantes 113823
... ... ... ... ...
75 2017 True concluintes_fem 8203
76 2018 False concluintes_fem 6209
77 2018 True concluintes_fem 8204
78 2019 False concluintes_fem 5982
79 2019 True concluintes_fem 8827

80 rows × 4 columns

px.line(dfg, x='ano', y='value', color=var, line_dash='variable', range_y=[0, None])
px.bar(dfg, x=var, y='value', color='variable', barmode='group', animation_frame='ano', range_y=[0, calc_round_ceil(dfg)])
px.scatter(df, x='frac_ingressantes', y='frac_concluintes', color='rede_publica', opacity=.75, size='concluintes_fem')

Por se é Presencial

var = 'presencial'
dfg = get_grouped(df, var)
dfg
ano presencial variable value
0 2010 False ingressantes 8099
1 2010 True ingressantes 110728
2 2011 False ingressantes 9181
3 2011 True ingressantes 126598
4 2012 False ingressantes 13438
... ... ... ... ...
75 2017 True concluintes_fem 14653
76 2018 False concluintes_fem 1126
77 2018 True concluintes_fem 13287
78 2019 False concluintes_fem 1216
79 2019 True concluintes_fem 13593

80 rows × 4 columns

px.line(dfg, x='ano', y='value', color=var, line_dash='variable', range_y=[0, None])
px.bar(dfg, x=var, y='value', color='variable', barmode='group', animation_frame='ano', range_y=[0, calc_round_ceil(dfg)])
px.scatter(df, x='frac_ingressantes', y='frac_concluintes', color='presencial', opacity=.75, size='concluintes_fem')

Por se é Bacharelado

var = 'bacharel'
dfg = get_grouped(df, var)
dfg
ano bacharel variable value
0 2010 False ingressantes 44212
1 2010 True ingressantes 74615
2 2011 False ingressantes 51459
3 2011 True ingressantes 84320
4 2012 False ingressantes 58819
... ... ... ... ...
75 2017 True concluintes_fem 11779
76 2018 False concluintes_fem 3868
77 2018 True concluintes_fem 10545
78 2019 False concluintes_fem 3855
79 2019 True concluintes_fem 10954

80 rows × 4 columns

px.line(dfg, x='ano', y='value', color=var, line_dash='variable')
px.bar(dfg, x=var, y='value', color='variable', barmode='group', animation_frame='ano', range_y=[0, calc_round_ceil(dfg)])
px.scatter(df, x='frac_ingressantes', y='frac_concluintes', color='bacharel', opacity=.75, size='concluintes_fem')